package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.BaseAttrInfo;
import com.atguigu.gmall.model.product.BaseAttrValue;
import com.atguigu.gmall.product.mapper.BaseAttrValueMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.atguigu.gmall.product.service.BaseAttrInfoService;
import com.atguigu.gmall.product.mapper.BaseAttrInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
@Service
public class BaseAttrInfoServiceImpl extends ServiceImpl<BaseAttrInfoMapper, BaseAttrInfo>
        implements BaseAttrInfoService {
    @Autowired
    private BaseAttrInfoMapper baseAttrInfoMapper;
    @Autowired
    private BaseAttrValueMapper baseAttrValueMapper;

    @Override
    public List<BaseAttrInfo> getAttrInfoList(Long category1Id, Long category2Id, Long category3Id) {
        return baseAttrInfoMapper.getAttrInfoList(category1Id, category2Id, category3Id);

    }

    //保存平台信息和值
    @Transactional
    @Override
    public void saveAttrInfo(BaseAttrInfo baseAttrInfo) {
        //保存到info表
        baseAttrInfoMapper.insert(baseAttrInfo);
        List<BaseAttrValue> attrValueList = baseAttrInfo.getAttrValueList();
        Long attrInfoId = baseAttrInfo.getId();
        //保存到value表
        for (BaseAttrValue baseAttrValue : attrValueList) {
            baseAttrValue.setAttrId(attrInfoId);
            baseAttrValueMapper.insert(baseAttrValue);
        }

    }

    //修改保存二合一
    @Override
    @Transactional
    public void updateAttrInfo(BaseAttrInfo baseAttrInfo) {
        Long id = baseAttrInfo.getId();

        if (id != null) {
            //先删除
            List<Long> nodelete_listId = new ArrayList<>();
            //拿到不用删除的id集合
            for (BaseAttrValue baseAttrValue : baseAttrInfo.getAttrValueList()) {
                if (baseAttrValue.getId() != null) {
                    nodelete_listId.add(baseAttrValue.getId());
                }
            }
            QueryWrapper<BaseAttrValue> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("attr_id", id);
            if (nodelete_listId.size() > 0) {

                queryWrapper.notIn("id", nodelete_listId);
                //删除不在集合中的数据
                baseAttrValueMapper.delete(queryWrapper);
            } else {

                baseAttrValueMapper.delete(queryWrapper);
            }

        }


        //id为空表示为添加
        if (id == null) {
            saveAttrInfo(baseAttrInfo);
        } else {
            //id不为空表示修改
            baseAttrInfoMapper.updateById(baseAttrInfo);
            //判断valueList
            List<BaseAttrValue> attrValueList = baseAttrInfo.getAttrValueList();
            for (BaseAttrValue baseAttrValue : attrValueList) {
                if (baseAttrValue.getId() != null) {
                    //1.有id的直接修改
                    baseAttrValueMapper.updateById(baseAttrValue);
                }

                //2.如果属性值id为空则添加
                if (baseAttrValue.getId() == null) {
                    baseAttrValue.setAttrId(id);
                    baseAttrValueMapper.insert(baseAttrValue);
                }


            }
        }
    }
}




